package sample.SendRouterOrder;

/**
 * 全自主
 * 功能控制 AACC
 * 作者：w on 2021-08-14.
 * 邮箱：y141111@126.com
 * 版本：v1.0
 */
public class Order_AutoControl {

    public static byte[] ByteArrayOfInts(int... ints) {
        int length = ints.length;
        byte[] bytes = new byte[length];
        for(int i = 0; i < length; ++i) {
            byte anInt = (byte)ints[i];
            bytes[i] = anInt;
        }
        return bytes;
    }
    // AA CC H N S 0 0 5 功能 55
    // AA CC H N S 0 0 5  00  55
    private static byte[] order = new byte[]{
            (byte)0xaa, (byte)0xcc,
            (byte)0x48, (byte)0x4e, (byte)0x53, (byte)0x30, (byte)0x30, (byte)0x35,
            0, (byte)0x55};
    public static byte[] recv_order = new byte[]{
            (byte)0xaa, (byte)0xcc,
            (byte)0x48, (byte)0x4e, (byte)0x53, (byte)0x30, (byte)0x30, (byte)0x35,
            0, (byte)0x55};

    /**
     * 设置识别码 字符串
     * @param str   eg: HNS005
     */
    public static boolean setEpNameString(String str){
        byte[] bytes = str.getBytes();
        if (bytes.length == 6){
            recv_order[2] = order[2] = bytes[0];
            recv_order[3] = order[3] = bytes[1];
            recv_order[4] = order[4] = bytes[2];
            recv_order[5] = order[5] = bytes[3];
            recv_order[6] = order[6] = bytes[4];
            recv_order[7] = order[7] = bytes[5];
            return true;
        }else {
            return false;
        }
    }
    /**
     * 设置识别码 bytes
     * @param bytes   eg: new byte[]{(byte)0x48, (byte)0x4e, (byte)0x53, (byte)0x30, (byte)0x30, (byte)0x35}
     */
    public static boolean setEpNameBytes(byte[] bytes){
        if (bytes.length == 6){
            recv_order[2] = order[2] = bytes[0];
            recv_order[3] = order[3] = bytes[1];
            recv_order[4] = order[4] = bytes[2];
            recv_order[5] = order[5] = bytes[3];
            recv_order[6] = order[6] = bytes[4];
            recv_order[7] = order[7] = bytes[5];
            return true;
        }else {
            return false;
        }
    }
    /**
     * 获取识别码字符串
     * @return eg. HNS005
     */
    public static String getEpName(){
        return new String(new byte[]{order[2], order[3], order[4], order[5], order[6], order[7]});
    }

    /**
     * 更改功能
     * 00 初值
     * 01 开始全自助
     * 02 停止全自助
     * 03 记录第一点位置
     * 04 记录第二点位置
     * 05 记录第三点位置
     * 06 读取三点位置信息
     * 07 记录校园遍历 左拐位置
     * 08 记录校园遍历 右拐位置
     * 09 记录校园遍历 180拐位置
     * 10 读取校园遍历信息
     * @param b 功能
     */
    public static void setFunction(byte b){
        order[8] = b;
        if (onChangeListener != null){
            onChangeListener.onChange();
        }
    }

    /**
     * 获取功能
     * 00 初值
     * 01 开始全自助
     * 02 停止全自助
     * 03 记录第一点位置
     * 04 记录第二点位置
     * 05 记录第三点位置
     * 06 读取三点位置信息
     * 07 记录校园遍历 左拐位置
     * 08 记录校园遍历 右拐位置
     * 09 记录校园遍历 180拐位置
     * 10 读取校园遍历信息
     * @return 功能
     */
    public static byte getFunction(){
        return order[8];
    }


    /**
     * 获取当前控制指令的所有状态数组
     * @return byte数组
     */
    public static byte[] getOrder(){
        return order;
    }

    /**
     * 获取 控制命令变量的16禁止字符串
     * @return eg: AAAA0A00000000000A
     */
    public static String getOrderHexString(){
        StringBuilder str = new StringBuilder();
        for (byte i: order){
            String tmp = Integer.toHexString(i & 0xff);
            str.append(tmp.length() > 1 ? tmp : "0" + tmp);
        }
        return str.toString().toUpperCase();    // str.toUpperCase() 转换成大写
    }
    public interface OnChangeListener {
        void onChange();    // 值改变
    }
    private static OnChangeListener onChangeListener;
    public static void setOnChangeListener(OnChangeListener onChange){
        onChangeListener = onChange;
    }
}
